(レポート) CMP301: Deep Dive on Amazon EC2 Instances, Featuring Performance Optimization #reinvent
こんにちは。大阪の市田です。
re:Invent 2016の「CMP301 - Deep Dive on Amazon EC2 Instances, Featuring Performance Optimization Best Practices」を動画で聴講したのでレポートします。
EC2インスタンスの歴史
- M1インスタンスから2006年8月にスタート
- 2016年の時点で種類も非常に増加
プレイスメントグループ
- 物理的に近接
- 高帯域幅と低レイテンシー
インスタンスタイプの選択肢
- メモリを大量に使う場合メモリ最適化されたR3インスタンス
- 計算能力が必要であればC4
- よくバランスされた汎用的なものにはM4やT2
仮想CPUとは(vCPUとは)
- vCPUはハイパースレッディングのコア
- 物理コアがハイパースレッディング
- 通常一度にほぼ2つのことを行います。
- https://aws.amazon.com/ec2/virtualcores/
- ハイパースレッディングを無効化することも可能
/sys/devices/system/cpu/cpuX/online
に0
をセット
- CPUの情報の確認には「lscpu」コマンド
- grubの設定を変更するとでも対応可能
- インスタンスタイプを変更した時は忘れず更新
TSCクロックソース
- TSCクロックソースの利用が推奨
- もし使っていなければ変更可能
CステートとPステートの管理
- インスタンスタイプによりCステートとPステートが制御できる
- c4.8xlarge
- d2.8xlarge
- m4.10xlarge
- m4.16xlarge
- p2.16xlarge
- x1.16xlarge
- x1.32xlarge
- 深いCステートに入るのを制御できる
- grub.confを編集
- intel_idle.max_cstate=1
- AVX2に対するPステートの制御
- 周波数の激しい変更はアプリケーションを遅くすることがある
- その為、Turbo Boostを無効できる
T2インスタンスについて
- バースト可能なCPUを持つ
- インスタンスタイプによりベースラインが違う
X1インスタンスについて
- 約2TBの最大のメモリを持つインスタンス
- クワッドソケット
- 大きなインメモリデータベース
- ビッグデータ処理
- HPCワークロード
NUMA
- GRUBブートパラメータでオフにできる
numa=off
の設定- CPU間のメモリ移動を最小限にする
- アプリケーションによってはパフォーマンスを向上が期待できる
Operating System Impact Performance
- RHEL6とRHEL7で比較
- 「ebizzy」というベンチマークツールの利用
- 「perf」コマンドでパフォーマンストレース
- 「Flame Graph」で各処理で時間がかかっているコードパスを見ることができる
- RHEL7にすることで性能向上
Grant Mapping
- カーネル3.8.0以降の利用推奨
- プール時に一度Grant mappingが行われる
- データがGrant poolにコピーされる
拡張ネットワーキング
- SR-IOVの使用
Elastic Network Adaputer(ENA)
- ハードウェアのIPv4ヘッダーチェックサム生成
- キューを受信して内部のオーバーヘッドを削減
- 適切なvCPUへ着信パケットの誘導
- プレイスメントグループで20Gbpsのネットワーク速度
- オープンソースなネットワークドライバ
下記が参考になります。
Elastic Network Adapter – Amazon EC2 向けの高性能パフォーマンスネットワークインターフェイス | Amazon Web Services ブログ
EBS最適化
- EBS最適化インスタンスの利用
Summary
- HVMのAMI利用
- TSCクロックソース利用
- Cステート、Pステートの管理
- T2インスタンスはCPUクレジットを監視する
- Linux OSは最新のモダンなOSを使う
- NUMAバランシング
- Persistent grants(パッチの適用)によるI/Oパフォーマンス向上
- 拡張ネットワーキングの利用
- アプリケーションのプロファイリング
最後に
デフォルトで利用する以外にも、EC2の性能向上にはチューニングポイントがたくさんあることが分かりました。
今回のre:Inventでは新たに多くのインスタンスタイプが発表されていますが、これらのTipsを元に、より高性能なEC2環境の作成を目指していきたいと思います。
以上です。